<?php

  interface IChar {

    /**
     * Returns a Boolean indicating whether this instance is equal to a specified object.
     * @param IChar The specified object.
     * @return IBoolean True if the specified object is equal to this instance, false otherwise.
     */
    function equals(IChar $char = null);

    /**
     * Returns a Boolean indicating whether a specified unicode character is categorized as a decimal digit.
     * @static
     * @param IChar The specified object.
     * @return IBoolean True if the specified object is a digit, false otherwise.
     * @link http://php.net/manual/en/function.ord.php
     */
    function isDigit(IChar $char = null);

    /**
     * Returns a Boolean indicating whether a specified unicode character is categorized as a letter.
     * @param IChar The specified object.
     * @return IBoolean True if the specified object is a letter, false otherwise.
     * @link http://php.net/manual/en/function.ord.php
     */
    function isLetter(IChar $char = null);

    /**
     * Returns a Boolean indicating whether a specified unicode character is categorized as a decimal digit or a letter.
     * @param IChar The specified object.
     * @return IBoolean True if the specified object is a digit or a letter, false otherwise.
     * @link http://php.net/manual/en/function.ord.php
     */
    function isLetterOrDigit(IChar $char = null);

    /**
     * Returns a Boolean indicating whether a specified unicode character is in lower case.
     * @param IChar The specified object.
     * @return IBoolean True if the specified object is in lower case, false otherwise.
     * @link http://php.net/manual/en/function.ord.php
     */
    function isLower(IChar $char = null);

    /**
     * Returns a Boolean indicating whether a specified unicode character is categorized as a punctuation.
     * @param IChar The specified object.
     * @return IBoolean True if the specified object is a punctuation, false otherwise.
     * @link http://php.net/manual/en/function.ord.php
     */
    function isPunctuation(IChar $char = null);

    /**
     * Returns a Boolean indicating whether a specified unicode character is in upper case.
     * @param IChar The specified object.
     * @return IBoolean True if the specified object is in upper case, false otherwise.
     * @link http://php.net/manual/en/function.ord.php
     */
    function isUpper(IChar $char = null);

    /**
     * Returns a Boolean indicating whether a specified unicode character is categorized as a white space.
     * @param IChar The specified object.
     * @return IBoolean True if the specified object is a white space, false otherwise.
     * @link http://php.net/manual/en/function.ord.php
     */
    function isWhiteSpace(IChar $char = null);

    /**
     * Returns the char value as an instance of IChar.
     * @param char $char The char to parse.
     * @return IChar The parse char.
     */
    static function parse($char);

    /**
     * Returns a lower Char.
     * @param IChar $char The char to lower.
     * @return IChar The lowered char.
     */
    function toLower(IChar $char = null);

    /**
     * Returns the char.
     * @return string The specified char as a String.
     */
    function toString(IChar $char = null);

    /**
     * Returns an upper Char.
     * @param IChar $char The char to upper.
     * @return IChar The uppered char.
     */
    function toUpper(IChar $char = null);

    /**
     * Returns the char value.
     * @return char The internal char value.
     */
    function charValue();
  }

?>
